Background

This is my go-to template for work projects. I wanted a notebook with some minimal slide functionality without having to separate/commit whole hog to a separate ioslides output or whatever. Helps maintain flow.

Don’t want a dependency of a theme package, just plain ol HTML/CSS/JS

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 1

Plan

Flowchart

htmltools::HTML('
  <div class="mermaid">
  graph LR
      A --- B
      B-->C[fa:fa-ban forbidden]
      B-->D(fa:fa-spinner);
  </div>
  ')
graph LR A --- B B-->C[fa:fa-ban forbidden] B-->D(fa:fa-spinner);

User Journey

htmltools::HTML('
  <div class="mermaid">
journey
    title My working day
    section Go to work
      Make tea: 5: Me
      Go upstairs: 3: Me
      Do work: 1: Me, Cat
    section Go home
      Go downstairs: 5: Me
      Sit down: 5: Me
  </div>
  ')
journey title My working day section Go to work Make tea: 5: Me Go upstairs: 3: Me Do work: 1: Me, Cat section Go home Go downstairs: 5: Me Sit down: 5: Me

Sequence Diagram

htmltools::HTML('
  <div class="mermaid">
sequenceDiagram
    participant John
    participant Alice
    Alice->>John: Hello John, how are you?
    John-->>Alice: Great!
  </div>
  ')
sequenceDiagram participant John participant Alice Alice->>John: Hello John, how are you? John-->>Alice: Great!

Gantt

Doesn’t work

htmltools::HTML('
  <div class="mermaid">
gantt
    title A Gantt Diagram
    dateFormat  YYYY-MM-DD
    section Section
    A task           :a1, 2014-01-01, 30d
    Another task     :after a1  , 20d
    section Another
    Task in sec      :2014-01-12  , 12d
    another task      : 24d
  </div>
  ')
gantt title A Gantt Diagram dateFormat YYYY-MM-DD section Section A task :a1, 2014-01-01, 30d Another task :after a1 , 20d section Another Task in sec :2014-01-12 , 12d another task : 24d

Work

Can’t tabset these

a

knitr::opts_chunk$set(echo = TRUE)
t(t(letters))
##       [,1]
##  [1,] "a" 
##  [2,] "b" 
##  [3,] "c" 
##  [4,] "d" 
##  [5,] "e" 
##  [6,] "f" 
##  [7,] "g" 
##  [8,] "h" 
##  [9,] "i" 
## [10,] "j" 
## [11,] "k" 
## [12,] "l" 
## [13,] "m" 
## [14,] "n" 
## [15,] "o" 
## [16,] "p" 
## [17,] "q" 
## [18,] "r" 
## [19,] "s" 
## [20,] "t" 
## [21,] "u" 
## [22,] "v" 
## [23,] "w" 
## [24,] "x" 
## [25,] "y" 
## [26,] "z"

b

knitr::opts_chunk$set(echo = TRUE)
letters
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"

Findings/Recommendations

This section can function as slides if there’s not too much to show. To group slides within slides, see Slides

Revenue is up!

mtcars

Except on Mars!

Slides

Can’t link to these

< >

1

As you can see here, the results speak for themselves.

2

As you can see here, the results speak for themselves.

3

As you can see here, the results speak for themselves.


Appendix

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

R Session Info

sessionInfo()
## R version 3.5.1 (2018-07-02)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 18362)
## 
## Matrix products: default
## 
## locale:
## [1] LC_COLLATE=English_United States.1252 
## [2] LC_CTYPE=English_United States.1252   
## [3] LC_MONETARY=English_United States.1252
## [4] LC_NUMERIC=C                          
## [5] LC_TIME=English_United States.1252    
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] dplyr_0.8.5   plotly_4.8.0  ggplot2_3.1.0
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_1.0.4           later_1.0.0          pillar_1.3.1        
##  [4] compiler_3.5.1       plyr_1.8.4           base64enc_0.1-3     
##  [7] tools_3.5.1          digest_0.6.25        viridisLite_0.3.0   
## [10] jsonlite_1.5         evaluate_0.14        tibble_2.0.1        
## [13] gtable_0.2.0         pkgconfig_2.0.2      rlang_0.4.5         
## [16] shiny_1.4.0.2        crosstalk_1.0.0      yaml_2.2.0          
## [19] xfun_0.8             fastmap_1.0.1        withr_2.1.2         
## [22] stringr_1.4.0        httr_1.4.0           knitr_1.23          
## [25] htmlwidgets_1.5.1    grid_3.5.1           tidyselect_0.2.5    
## [28] glue_1.3.0           data.table_1.12.2    R6_2.3.0            
## [31] rmarkdown_1.13       tidyr_0.8.2          purrr_0.2.5         
## [34] magrittr_1.5         promises_1.1.0       scales_1.0.0        
## [37] htmltools_0.4.0.9003 assertthat_0.2.0     xtable_1.8-3        
## [40] mime_0.6             colorspace_1.4-0     httpuv_1.5.2        
## [43] labeling_0.3         stringi_1.2.4        lazyeval_0.2.1      
## [46] munsell_0.5.0        crayon_1.3.4

Footnotes


  1. footnote

LS0tDQpwYXJhbXM6DQogIGppcmE6ICJIQlJBLTk5Ig0KICBnaXRodWI6ICJnaXRodWIuY29tIg0KICB0aXRsZTogIkFyZSBkb2N1bWVudCBoZWFkZXJzIGluIHRoZSBmb3JtIG9mIHF1ZXN0aW9ucyBtb3JlIGVuZ2FnaW5nIHRoYW4gc3RhdGVtZW50cz8iDQogIGxvZ29fdXJsOiAiaHR0cHM6Ly9oYnIub3JnL3Jlc291cmNlcy9jc3MvaW1hZ2VzL0hCUl9sb2dvX2JsYWNrLnN2ZyINCiAgYWNjZW50X2NvbG9yOiAiI2M4MjUwMiINCnRpdGxlOiAnYHIgcGFyYW1zJHRpdGxlYCcNCmF1dGhvcjogJ2ByIFN5cy5pbmZvKClbN11gJw0KZGF0ZTogJ2ByIFN5cy50aW1lKClgJw0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAga2VlcF9tZDogdHJ1ZQ0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogDQogICAgICBjb2xsYXBzZWQ6IGZhbHNlDQogICAgICBzbW9vdGhfc2Nyb2xsOiBmYWxzZQ0KLS0tDQoNCjxzdHlsZT4NCkBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9U291cmNlK1NhbnMrUHJvJmRpc3BsYXk9c3dhcCcpOw0KDQpib2R5IHtmb250LWZhbWlseTogIlNvdXJjZSBTYW5zIFBybyIsIHNhbnMtc2VyaWYgIWltcG9ydGFudDt9DQpoMSwgaDIsIGgzLCBoNCwgaDUge2ZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDsgcGFkZGluZy10b3A6IDJyZW07fQ0KYSB7Y29sb3I6IGByIHBhcmFtcyRhY2NlbnRfY29sb3JgfQ0KLmF1dGhvciwgLmRhdGUge3BhZGRpbmctdG9wOiAxcmVtO30NCi5tYWluLWNvbnRhaW5lcnttYXgtd2lkdGg6IDg1JSAhaW1wb3J0YW50O30NCg0KLyogLS0tLSBUT0MgLS0tLSAqLw0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUsIC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzLCAubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciB7YmFja2dyb3VuZC1jb2xvcjogYHIgcGFyYW1zJGFjY2VudF9jb2xvcmA7IGJvcmRlci1jb2xvcjogYHIgcGFyYW1zJGFjY2VudF9jb2xvcmA7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgcGFkZGluZy1sZWZ0OiAycmVtO30NCi50b2NpZnksIC5uYXYtdGFicyA+IGxpID4gYSB7d2Via2l0LWJvcmRlci1yYWRpdXM6IHVuc2V0OyBtb3otYm9yZGVyLXJhZGl1czogdW5zZXQ7IGJvcmRlci1yYWRpdXM6IHVuc2V0O30NCi50b2NpZnk6OmJlZm9yZSB7YmFja2dyb3VuZC1pbWFnZTogdXJsKGByIHBhcmFtcyRsb2dvX3VybGApOyBwYWRkaW5nOiAycmVtOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGNvbnRlbnQ6ICIiOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDBweDsgYmFja2dyb3VuZC1zaXplOiAxNTBweDsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O30NCi50b2NpZnk6bnRoLWNoaWxkKDEpIHVsOm50aC1jaGlsZCgxKTo6YmVmb3JlIHtjb250ZW50OiAiYHIgcGFyYW1zJHRpdGxlYCI7IHBhZGRpbmctbGVmdDogLjI1cmVtOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7fQ0KLnRvY2lmeSB1bCBsaTpmaXJzdC1vZi10eXBlIHttYXJnaW4tdG9wOiAxcmVtO30NCi50b2NpZnkge3BhZGRpbmctdG9wOiAycmVtOyBwYWRkaW5nLWJvdHRvbTogMnJlbTt9DQoudG9jaWZ5LWhlYWRlciB7dGV4dC1pbmRlbnQ6IHVuc2V0ICFpbXBvcnRhbnQ7IHBhZGRpbmctbGVmdDogMnJlbTt9DQp1bC50b2NpZnktaGVhZGVyIHtwYWRkaW5nLWxlZnQ6IDFyZW07fQ0KI3RvY2lmeS1oZWFkZXIwIHtwYWRkaW5nLXRvcDogMnJlbTt9DQoubmF2LXRhYnMge3BhZGRpbmctdG9wOiAxcmVtO30NCg0KLyogZGlhZ3JhbW1lci9tZXJtYWlkICovDQovKiAuRGlhZ3JhbW1lUiB7aGVpZ2h0OiB1bnNldCAhaW1wb3J0YW50O30NCi5tZXJtYWlkIC5ub2RlIHJlY3QsIC5ub2RlIGNpcmNsZSwgLm5vZGUgZWxsaXBzZSwgLm5vZGUgcG9seWdvbiB7ZmlsbDogI2ViZjBmMDsgc3Ryb2tlOiAjYWJhZmIwO30NCiovDQoNCnN1bW1hcnkge3BhZGRpbmc6IDFyZW07IGJvcmRlcjogMXB4IHNvbGlkICNhYmFmYjA7fQ0KDQovKiBzbGlkZSBzdHVmZiAqLw0KLm5vc2VsZWN0IHsNCiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lOyAvKiBpT1MgU2FmYXJpICovDQogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsgLyogU2FmYXJpICovDQogICAgIC1raHRtbC11c2VyLXNlbGVjdDogbm9uZTsgLyogS29ucXVlcm9yIEhUTUwgKi8NCiAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOyAvKiBGaXJlZm94ICovDQogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsgLyogSW50ZXJuZXQgRXhwbG9yZXIvRWRnZSAqLw0KICAgICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7IC8qIE5vbi1wcmVmaXhlZCB2ZXJzaW9uLCBjdXJyZW50bHkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYnkgQ2hyb21lIGFuZCBPcGVyYSAqLw0KfQ0KDQoubmF2LWFycm93IHsgZm9udC1zaXplOiAzMHB4OyBiYWNrZ3JvdW5kOiAjQzgyNTA1OyBjb2xvcjogd2hpdGU7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2s7IHRleHQtYWxpZ246IGNlbnRlciB9DQoNCi5maXhlZC1oZWlnaHQgeyBtYXgtaGVpZ2h0OiA0MDBweCAhaW1wb3J0YW50OyBvdmVyZmxvdzogYXV0bzsgfQ0KDQo8L3N0eWxlPg0KDQo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbWVybWFpZC84LjUuMS9tZXJtYWlkLm1pbi5qcyI+PC9zY3JpcHQ+DQoNCjxzY3JpcHQ+DQpmdW5jdGlvbiBnb0JhY2t3YXJkKCkgew0KICBsZXQgcHJldmlvdXMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi50YWJuYXYgPiB1bC5uYXYgPiBsaSIpKS5pbmRleE9mKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi50YWJuYXYgPiB1bC5uYXYgPiBsaS5hY3RpdmUiKSktMTsNCiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnRhYm5hdiA+IHVsLm5hdiA+IGxpID4gYSIpW3ByZXZpb3VzXS5jbGljaygpDQp9Ow0KDQpmdW5jdGlvbiBnb0ZvcndhcmQoKSB7DQogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi50YWJuYXYgPiB1bC5uYXYgPiBsaS5hY3RpdmUgKyBsaSA+IGEiKS5jbGljaygpOw0KfTsNCjwvc2NyaXB0Pg0KDQoNCiMjIEJhY2tncm91bmQNCg0KVGhpcyBpcyBteSBnby10byB0ZW1wbGF0ZSBmb3Igd29yayBwcm9qZWN0cy4gSSB3YW50ZWQgYSBub3RlYm9vayB3aXRoIHNvbWUgbWluaW1hbCBzbGlkZSBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgaGF2aW5nIHRvIHNlcGFyYXRlL2NvbW1pdCB3aG9sZSBob2cgdG8gYSBzZXBhcmF0ZSBpb3NsaWRlcyBvdXRwdXQgb3Igd2hhdGV2ZXIuIEhlbHBzIG1haW50YWluIGZsb3cuIA0KDQpEb24ndCB3YW50IGEgZGVwZW5kZW5jeSBvZiBhIHRoZW1lIHBhY2thZ2UsIGp1c3QgcGxhaW4gb2wgSFRNTC9DU1MvSlMNCg0KPiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uIFteMV0NCg0KDQpbXjFdOiBmb290bm90ZQ0KDQojIyMgUGxhbiB7LnRhYnNldH0NCg0KIyMjIyBGbG93Y2hhcnQNCmBgYHtyLCByZXN1bHRzPSJhc2lzIn0NCmh0bWx0b29sczo6SFRNTCgnDQogIDxkaXYgY2xhc3M9Im1lcm1haWQiPg0KICBncmFwaCBMUg0KICAgICAgQSAtLS0gQg0KICAgICAgQi0tPkNbZmE6ZmEtYmFuIGZvcmJpZGRlbl0NCiAgICAgIEItLT5EKGZhOmZhLXNwaW5uZXIpOw0KICA8L2Rpdj4NCiAgJykNCmBgYA0KDQoNCiMjIyMgVXNlciBKb3VybmV5IA0KYGBge3IsIHJlc3VsdHM9ImFzaXMifQ0KaHRtbHRvb2xzOjpIVE1MKCcNCiAgPGRpdiBjbGFzcz0ibWVybWFpZCI+DQpqb3VybmV5DQogICAgdGl0bGUgTXkgd29ya2luZyBkYXkNCiAgICBzZWN0aW9uIEdvIHRvIHdvcmsNCiAgICAgIE1ha2UgdGVhOiA1OiBNZQ0KICAgICAgR28gdXBzdGFpcnM6IDM6IE1lDQogICAgICBEbyB3b3JrOiAxOiBNZSwgQ2F0DQogICAgc2VjdGlvbiBHbyBob21lDQogICAgICBHbyBkb3duc3RhaXJzOiA1OiBNZQ0KICAgICAgU2l0IGRvd246IDU6IE1lDQogIDwvZGl2Pg0KICAnKQ0KYGBgDQoNCiMjIyMgU2VxdWVuY2UgRGlhZ3JhbQ0KYGBge3IsIHJlc3VsdHM9ImFzaXMifQ0KaHRtbHRvb2xzOjpIVE1MKCcNCiAgPGRpdiBjbGFzcz0ibWVybWFpZCI+DQpzZXF1ZW5jZURpYWdyYW0NCiAgICBwYXJ0aWNpcGFudCBKb2huDQogICAgcGFydGljaXBhbnQgQWxpY2UNCiAgICBBbGljZS0+PkpvaG46IEhlbGxvIEpvaG4sIGhvdyBhcmUgeW91Pw0KICAgIEpvaG4tLT4+QWxpY2U6IEdyZWF0IQ0KICA8L2Rpdj4NCiAgJykNCmBgYA0KDQojIyMjIEdhbnR0DQpEb2Vzbid0IHdvcmsNCmBgYHtyLCByZXN1bHRzPSJhc2lzIn0NCmh0bWx0b29sczo6SFRNTCgnDQogIDxkaXYgY2xhc3M9Im1lcm1haWQiPg0KZ2FudHQNCiAgICB0aXRsZSBBIEdhbnR0IERpYWdyYW0NCiAgICBkYXRlRm9ybWF0ICBZWVlZLU1NLUREDQogICAgc2VjdGlvbiBTZWN0aW9uDQogICAgQSB0YXNrICAgICAgICAgICA6YTEsIDIwMTQtMDEtMDEsIDMwZA0KICAgIEFub3RoZXIgdGFzayAgICAgOmFmdGVyIGExICAsIDIwZA0KICAgIHNlY3Rpb24gQW5vdGhlcg0KICAgIFRhc2sgaW4gc2VjICAgICAgOjIwMTQtMDEtMTIgICwgMTJkDQogICAgYW5vdGhlciB0YXNrICAgICAgOiAyNGQNCiAgPC9kaXY+DQogICcpDQpgYGANCg0KDQojIyBXb3JrIHsudGFic2V0fQ0KQ2FuJ3QgdGFic2V0IHRoZXNlDQoNCiMjIyBhIHsuZml4ZWQtaGVpZ2h0fQ0KYGBge3J9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQp0KHQobGV0dGVycykpDQpgYGANCg0KIyMjIGIgey5maXhlZC1oZWlnaHR9DQpgYGB7cn0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmxldHRlcnMNCmBgYA0KDQoNCiMjIEZpbmRpbmdzL1JlY29tbWVuZGF0aW9ucyB7LnRhYnNldH0NClRoaXMgc2VjdGlvbiBjYW4gZnVuY3Rpb24gYXMgc2xpZGVzIGlmIHRoZXJlJ3Mgbm90IHRvbyBtdWNoIHRvIHNob3cuIFRvIGdyb3VwIHNsaWRlcyB3aXRoaW4gc2xpZGVzLCBzZWUgU2xpZGVzDQoNCiMjIyBSZXZlbnVlIGlzIHVwIQ0KDQpgYGB7ciBjYXJzLCBjb2xzLnByaW50ID0gMywgcm93cy5wcmludCA9IDV9DQptdGNhcnMNCmBgYA0KDQojIyMgRXhjZXB0IG9uIE1hcnMhDQoNCmBgYHtyIHByZXNzdXJlLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9IjgwJSJ9DQpwbG90KHByZXNzdXJlKQ0KYGBgDQoNCg0KIyMjIFNsaWRlcyB7LnRhYnNldCAudGFibmF2fQ0KQ2FuJ3QgbGluayB0byB0aGVzZQ0KDQo8ZGl2IHN0eWxlPSJ3aWR0aDogMTAwJSAhaW1wb3J0YW50OyI+DQo8c3BhbiBjbGFzcz0ibmF2LWFycm93IG5vc2VsZWN0IiBzdHlsZT0iZmxvYXQ6bGVmdDsgd2lkdGg6IDUwJTsiIG9uY2xpY2s9ImdvQmFja3dhcmQoKSI+PDwvc3Bhbj4NCjxzcGFuIGNsYXNzPSJuYXYtYXJyb3cgbm9zZWxlY3QiIG9uY2xpY2s9ImdvRm9yd2FyZCgpIj4+PC9zcGFuPg0KPC9kaXY+DQoNCiMjIyMgYHIgbiA8LSAxOyBuYCANCkFzIHlvdSBjYW4gc2VlIGhlcmUsIHRoZSByZXN1bHRzIHNwZWFrIGZvciB0aGVtc2VsdmVzLiANCmBgYHtyIHNsaWRlIHNldHVwLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpOyBsaWJyYXJ5KGdncGxvdDIpOyBsaWJyYXJ5KGRwbHlyKTsga25pdHI6Om9wdHNfY2h1bmskc2V0KG91dC53aWR0aCA9ICIxMDAlIikNCmRhdGEuZnJhbWUoYT0xOjEwLCBiPXNhbXBsZSgxOjEwMCwgMTApKSAlPiUgeyBnZ3Bsb3QoLiwgYWVzKHg9YSwgeT1iKSkgKyBnZW9tX3BvaW50KCl9ICU+JSBnZ3Bsb3RseSguKQ0KYGBgDQoNCiMjIyMgYHIgbiA8LSBuKzE7IG5gDQpBcyB5b3UgY2FuIHNlZSBoZXJlLCB0aGUgcmVzdWx0cyBzcGVhayBmb3IgdGhlbXNlbHZlcy4gDQpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KZGF0YS5mcmFtZShhPTE6MTAsIGI9c2FtcGxlKDE6MTAwLCAxMCkpICU+JSB7IGdncGxvdCguLCBhZXMoeD1hLCB5PWIpKSArIGdlb21fcG9pbnQoKX0gJT4lIGdncGxvdGx5KC4pDQpgYGANCg0KIyMjIyBgciBuIDwtIG4rMTsgbmANCkFzIHlvdSBjYW4gc2VlIGhlcmUsIHRoZSByZXN1bHRzIHNwZWFrIGZvciB0aGVtc2VsdmVzLiANCmBgYHtyIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpkYXRhLmZyYW1lKGE9MToxMCwgYj1zYW1wbGUoMToxMDAsIDEwKSkgJT4lIHsgZ2dwbG90KC4sIGFlcyh4PWEsIHk9YikpICsgZ2VvbV9wb2ludCgpfSAlPiUgZ2dwbG90bHkoLikNCmBgYA0KDQoNCi0tLQ0KDQojIyBBcHBlbmRpeA0KDQpUaGlzIGlzIGFuIFIgTWFya2Rvd24gZG9jdW1lbnQuIE1hcmtkb3duIGlzIGEgc2ltcGxlIGZvcm1hdHRpbmcgc3ludGF4IGZvciBhdXRob3JpbmcgSFRNTCwgUERGLCBhbmQgTVMgV29yZCBkb2N1bWVudHMuIEZvciBtb3JlIGRldGFpbHMgb24gdXNpbmcgUiBNYXJrZG93biBzZWUgPGh0dHA6Ly9ybWFya2Rvd24ucnN0dWRpby5jb20+Lg0KDQo8ZGV0YWlscz48c3VtbWFyeT5SIFNlc3Npb24gSW5mbzwvc3VtbWFyeT4NCg0KYGBge3J9DQpzZXNzaW9uSW5mbygpDQpgYGANCg0KPC9kZXRhaWxzPg0KDQo8c3R5bGU+DQouZm9vdG5vdGVzIGhyIHtkaXNwbGF5OiBub25lO30NCjwvc3R5bGU+DQoNCiMjIEZvb3Rub3Rlcw0KDQo8c2NyaXB0Pg0KICAgIHZhciBjb25maWcgPSB7DQogICAgICAgIHN0YXJ0T25Mb2FkOnRydWUsDQogICAgICAgIGZsb3djaGFydDp7DQogICAgICAgICAgICB1c2VNYXhXaWR0aDpmYWxzZSwNCiAgICAgICAgICAgIGh0bWxMYWJlbHM6dHJ1ZQ0KICAgICAgICB9DQogICAgfTsNCiAgICBtZXJtYWlkLmluaXRpYWxpemUoY29uZmlnKTsNCjwvc2NyaXB0Pg0KDQo=